Access violation at address 0048B44A
Otázka od: aaa
26. 9. 2002 16:54
Je to rok, co jsem se začal učit Delphi. Současně jsem musel převzít po svém
předchůdci větší dílko v Delphi v.5. Nejprve údržba a drobné úpravy, pak
dost velký zásah. Program mi teď v určitém místě spadne s hláškou : Project
Program.exe raised exception class EaccessViolation with message
'Access
violation at address 0048B44A in module Program.exe.Read of address
00000004'.
Use Step or Run to continue.
a já nejsem schopen na základě chybových hlášení poznat, kde je chyba.
Krokování přes debuger mne zavede do systému.
Byl by někdo ochoten mi pomoci? Pepa
---
Odchozí zpráva neobsahuje viry.
Zkontrolováno antivirovým systémem AVG (http://www.grisoft.cz).
Verze: 6.0.386 / Virová báze: 218 - datum vydání: 9.9.2002
Odpovedá: Peter Surovy
26. 9. 2002 15:53
Ahoj
----- Original Message -----
From: "aaa" <j.staufcik@msp.mesit.cz>
Sent: Thursday, September 26, 2002 2:51 PM
>: Project
> Program.exe raised exception class EaccessViolation with message
'Access
> violation at address 0048B44A in module Program.exe.Read of address
> 00000004'.
Use Step or Run to continue.
--- to moze byt mnoho dovodov hlavne si odkontroluj premenne
ci nezapisujes do malej premennej velke cislo a pod.
napr. do bytu zapises 260 a je to
do longword -1 a tak...
potom ak pouzivas instancie tried
ci ich spravne vytvaras:
MojObject.kresli //bude chyba
mojObject:=TObject.create;
MojObject.kresli; // uz by malo byt OK
> a já nejsem schopen na základě chybových hlášení poznat, kde je chyba.
> Krokování přes debuger mne zavede do systému.
--- co tym myslis?
Odpovedá: Ing. Pavel Žilinec
26. 9. 2002 17:50
Nevim, jestli je vubec mozne nektere takove chyby primo odchytit a
dosledovat.
Na nasem (take obsahlejsim) projektu se to take stava a u nas to treba
je neuvolnenim nejakych objektu z pameti (ted uz si na to davame dobry
pozor), ale i tak se nam takove hlasky jeste objevuji - je to dost
narocna prace toto vsechno dohledavat v hromade souboru
--------
ing. Pavel Zilinec
MailTo:zilinec@email.cz
Prog-Soft s.r.o. Plzen
Informacni system pro vyrobce
a distributory napoju
a> Je to rok, co jsem se začal učit Delphi. Současně jsem musel převzít po svém
a> předchůdci větší dílko v Delphi v.5. Nejprve údržba a drobné úpravy, pak
a> dost velký zásah. Program mi teď v určitém místě spadne s hláškou : Project
a> Program.exe raised exception class EaccessViolation with message
'Access
a> violation at address 0048B44A in module Program.exe.Read of address
a> 00000004'.
Use Step or Run to continue.
a> a já nejsem schopen na základě chybových hlášení poznat, kde je chyba.
a> Krokování přes debuger mne zavede do systému.
a> Byl by někdo ochoten mi pomoci? Pepa
Odpovedá: Dalibor Toman
26. 9. 2002 17:42
>Je to rok, co jsem se začal učit Delphi. Současně jsem musel převzít
po svém
>předchůdci větší dílko v Delphi v.5. Nejprve údržba a drobné úpravy,
pak
>dost velký zásah. Program mi teď v určitém místě spadne s hláškou :
Project
>Program.exe raised exception class EaccessViolation with message
'Access
>violation at address 0048B44A in module Program.exe.Read of address
>00000004'.
Use Step or Run to continue.
> a já nejsem schopen na základě chybových hlášení poznat, kde je
chyba.
>Krokování přes debuger mne zavede do systému.
navrhuju:
1) prelozit s debug info a stack frames a spustit v MemProofu. Pokud
budes
mit trochu stesti najde chybu v pouziti/dealokaci pameti
2) vygenerovat mapfile a podle adresy ty chyby najit/odhadnout
alespon unitu
kde k chybe dochazi. Casto se podobne chyby bohuzel projevi az v
SysUtils.pas atd (pri realokaci stringa apod)
3) podezrely kod doplnovat ladicimi hlaskami az se podari lokalizovat
konkretni rutinu/radku kodu...
Tipoval bych na nejaky problem se spatne inicializovanym stringem
(napriklad alokace pameti pro Record obsahujici ansistringa pomoci
GetMem, cteni Recordu obsahujiciho stringa ze souboru atd) atd.
D. Toman
Odpovedá: Petr Brant
26. 9. 2002 17:17
Duvodu muze byt cela rada. Nealokovana pamet, nekorektni pretypovani,
prepsany kus pameti,... To se neda urcit bez blizsiho zkoumani. Mozna by
pomohl kus kodu, zkus poslat.
RNDr. Petr Brant [brant@dcomm.cz]
D&COMM s.r.o.
Korunovační 6
Praha 7
tel. +420724007234
Subject: Access violation at address 0048B44A
Je to rok, co jsem se začal učit Delphi. Současně jsem musel převzít
po svém
předchůdci větší dílko v Delphi v.5. Nejprve údržba a drobné úpravy,
pak
dost velký zásah. Program mi teď v určitém místě spadne s hláškou :
Project
Program.exe raised exception class EaccessViolation with message
'Access
violation at address 0048B44A in module Program.exe.Read of address
00000004'.
Use Step or Run to continue.
a já nejsem schopen na základě chybových hlášení poznat, kde je
chyba.
Krokování přes debuger mne zavede do systému.
Odpovedá: Radek Levy
26. 9. 2002 16:58
Dobrý den,
a> Je to rok, co jsem se začal učit Delphi. Současně jsem musel převzít po svém
a> předchůdci větší dílko v Delphi v.5. Nejprve údržba a drobné úpravy, pak
a> dost velký zásah. Program mi teď v určitém místě spadne s hláškou : Project
a> Program.exe raised exception class EaccessViolation with message
'Access
a> violation at address 0048B44A in module Program.exe.Read of address
a> 00000004'.
Use Step or Run to continue.
a> a já nejsem schopen na základě chybových hlášení poznat, kde je chyba.
a> Krokování přes debuger mne zavede do systému.
a> Byl by někdo ochoten mi pomoci? Pepa
Kde je to k vidění ?
--
S pozdravem Radek Levy, A && L soft s.r.o.
Telefon: +420 284 862 333
Hotline: +420 284 862 338
Fax: +420 284 862 336
www: http://www.alsoft.cz
Odpovedá: Radek Levy
26. 9. 2002 17:54
Omlovám se, reagoval jsem omylem na váš mail. Nevšimnul jsem si že je
z konference a myslel jsem že je firemní.
Radek
Odpovedá: eNca
27. 9. 2002 9:07
aaa wrote:
>Je to rok, co jsem se začal učit Delphi. Současně jsem musel převzít po svém
>předchůdci větší dílko v Delphi v.5. Nejprve údržba a drobné úpravy, pak
>dost velký zásah. Program mi teď v určitém místě spadne s hláškou : Project
>Program.exe raised exception class EaccessViolation with message
'Access
>violation at address 0048B44A in module Program.exe.Read of address
>00000004'.
Use Step or Run to continue.
> a já nejsem schopen na základě chybových hlášení poznat, kde je chyba.
>Krokování přes debuger mne zavede do systému.
>
>
Spusť ten program z IDE. Za běhu programu je v IDE dostupná položka v
menu Search/Find error. Zadej tam adresu, na které došlo k chybě (v tvém
případě tedy
$0048B44A). Kurzor by se měl nastavit na řádek ve zdrojovém kódu, na kterém k
vyvolání výjimky došlo. Dost pomůže, pokud se alespoň rámcově vyznáš v
assambleru - v tom případě si otevři okno CPU a tam uvidíš přesně, proč k chybě
došlo. I bez assambleru se na to ale dá přijít po prostudování paskalského kódu
v těsném okolí místa, na které ukázal Find error. Z výše uvedeného hlášení je
velmi pravděpodobné (sázím 2:1 , že přistupuješ k vlastnosti nealokovaného
objektu, tedy něco jako:
type
a = class(TObject)
cosi: integer;
end;
var a: TMyObject;
i: integer;
begin
i := a.cosi;
Na posledním řádku dojde k uvedené chybě, protože 'a' je v tuto chvíli nil
(tedy nula) a adresa property cosi je (a + 4) = 00000004 - a to je paměť, která
tvému procesu nepatří a přístup na ní způsobí výše uvedené chybové hlášení.
eNca
Odpovedá: Jan Sebelík
27. 9. 2002 15:23
> Odesílatel: eNca <delphi@enca.cz>
> Spusť ten program z IDE. Za běhu programu je v IDE dostupná položka v
> menu Search/Find error. Zadej tam adresu, na které došlo k chybě (v tvém
> případě tedy
Napadu na toto tema uz tu bylo hodne, asi vsechny byly rozumne.
Problem je, ze zadny z nich nevede k stoprocentnimu nalezeni chyby (ani
FindError).
Pridam tedy jeste jeden:
Spust ten program z IDE, na vhodnych mistech si nastav breakpointy.
Pokud k tomu "Access Violation" dojde mezi breakpointem xx a xx+1, analyzuj
(krokuj) kod mezi temito breakpointy. Dojdes k volani procedury PPP, ktera
chybu zpusobi.
Pokracuj rekurzivne uvnitr procedury PPP.
Nakonec naleznes na konkretnim radku nektery z problemu, ktere byly v
paralelnich odpovedich popsany (nejcasteni neinicializovany objekt,
neinicializovana pamet).
Honza
=========================================
= HAES - RNDr. Jan Sebelik
= http://www.haes.cz
= Skolici a konzultacni stredisko pro Delphi a Win32
= Vojtiskova 206
= 507 81 Lazne Belohrad
= tel. 493 792 931 (mobil 776 347735)
=========================================